package com.my.yc.d0303;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.File;
import java.io.IOException;

@WebServlet(name = "UploadServlet", value = "/UploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        // 从请求中获取文件上传啊对象 Part ，"file" 上传的文件提交的字段名称 不是文件名
        Part file = request.getPart("myfile");
        file.getContentType(); // 文件类型 image hemlock text
        file.getName(); // == 》 字段名 file
        file.getSize(); // 文件大小
        file.getSubmittedFileName(); // 获得上传的文件名  Servlet3.1 才有这个方法
        //file.write("c:/" + file.getSubmittedFileName()); // 保存文件
        // 如何将文件上传到webapp 下
        // 获取应用上下文对象 上下文 = 》 运行环境
        // jsp 中应用上下文对象 叫 application
        ServletContext application = request.getServletContext();
        // 将/uploads (web路径) 转换为 磁盘路径
        String realPath = application.getRealPath("/uploads");
        System.out.println("realPath = " + realPath );

        // realPath 的目录不存在 那么创建文件夹
        new File(realPath).mkdirs();
        file.write(realPath + "/" + file.getSubmittedFileName()); // 保存文件

        // src 的地址怎么写， 假设文件名  a.jpg => /uploads/a.jpg
        String webpath = "uploads/" + file.getSubmittedFileName();
        response.getWriter().append("文件上传成功!<br>");
        if (file.getContentType().contains("image")){
            response.getWriter().printf("<img src='%s' style='height:200px'>", webpath);

        }else {
            // 普通文档直接提供下载， download => 默认下载后保存的文件名 => 强制下载
            response.getWriter().printf("<a href='%s' download='%s'>%s</a>"
                    , webpath
                    , file.getSubmittedFileName()
                    , file.getSubmittedFileName());
            // idea 里面的 uploads 是开发目录下的 uploads
            // 浏览器上传到 uploads 是运行目录下的 uploads

            // 重启服务之后， 运行目录里面多出的文件， 可能会被清除
        }
    }
}
